package co.yixiang.yshop.module.product.service.productcoupon;


import co.yixiang.yshop.framework.common.pojo.PageResult;
import co.yixiang.yshop.module.product.controller.admin.productcoupon.vo.*;
import co.yixiang.yshop.module.product.dal.dataobject.productcoupon.ProductCouponDO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;


/**
 * 商品优惠券 Service 接口
 *
 * @author moxiangrong
 */
public interface ProductCouponService extends IService<ProductCouponDO> {


    /**
     * 创建优惠券
     *
     * @return 优惠券id
     */
    Long createCoupon(ProductCouponCreateReqVO vo);

    /**
     * 修改优惠券
     *
     * @return 优惠券id
     */
    Boolean updateCoupon(ProductCouponUpdateReqVO vo);

    /**
     * 优惠券明细
     *
     * @return 优惠券明细
     */
    ProductCouponDetailRespVO getCouponDetail(Long id);


    /**
     * 获得优惠券分页
     *
     * @param pageReqVO 分页查询
     * @return 优惠券分页
     */
    PageResult<ProductCouponDetailRespVO> getCouponPage(StoreProductCouponPageReqVO pageReqVO);


    /**
     * 删除优惠券
     *
     * @param id 优惠券id
     * @return
     */
    Boolean deleteCoupon(Long id);

    /**
     * 获得优惠券分页
     *
     * @param pageReqVO 分页查询
     * @return 优惠券分页
     */
    PageResult<CanvasProductCouponRespVO> page(CanvasProductCouponPageReqVO pageReqVO);

    /**
     * 优惠券领券记录
     *
     * @param pageVO
     */
    PageResult<ProductCouponIssueRecordRespVO> couponIssueRecord(ProductCouponIssueRecordReqVO pageVO);

    /**
     * 导出优惠券兑换码
     *
     * @param pageVO
     * @return
     */
    List<ProductCouponIssueRecordRespVO> exportRecordCdKey(ProductCouponIssueRecordReqVO pageVO);

    /**
     * 删除兑换码
     *
     * @param ids
     */
    void deleteCouponCdKey(Long[] ids);

    /**
     * 通过优惠券查询id
     *
     * @param id
     * @return
     */
    ProductCouponDO findById(Long id);

    /**
     * 通过id更新券
     *
     * @return
     */
    int updateCouponById(ProductCouponDO couponDO);

    /**
     * 检查并更新券
     *
     * @param id
     * @param userId
     * @param cdKeyId
     * @param count
     * @return
     */
    Boolean couponCheckAndUpdate(Long id, Long userId, Long cdKeyId, long count);

}
